package com.leesche.zcsp.node.pay.cmbc.service;

import com.leesche.zcsp.node.pay.wecha.data.Message;
import com.leesche.zcsp.node.web.model.ServOrder;

import java.util.Map;

/**
 * @author reid
 * @Created 16/11/16
 */
public interface CmbcPayService {

    /**
     * @Description:    预支付
     * @param order     支付订单信息
     * @param openId    公众号openid
     * @param userAgent
     * @return
     * @throws Exception
     */
    Message<String> prePay(ServOrder order, String openId, String userAgent);

    /**
     * @Description:        代付/转账
     * @param transAmt      金额
     * @param custtomerName 收款方客户名称
     * @param acctNo        收款方银行账号
     */
    Map<String,String> transfer(Long transAmt, String custtomerName, String acctNo);

    /**
     * @Description:        申请退款
     * @param requestNo     交易请求流水号
     * @param origOrderDate 原商品订单的日期yyyyMMdd
     * @param origOrderNo   原交易商户订单号
     * @param transAmt      退款金额
     * @param refundReson   退款原因
     * @return
     * @throws Exception
     */
    Message<String> refund(String requestNo,String origOrderDate, String origOrderNo, long transAmt, String refundReson);

    /**
     * @Description:    查询交易订单状态
     * @param orderDate 商品订单的日期yyyyMMdd
     * @param orderNo   商户订单号
     * @return
     * @throws Exception
     */
    Message<String> queryOrderState(String orderDate, String orderNo);

    /**
     * @Description:        撤销当天交易,其他时间交易撤销始终报失败
     * @param orderNo   原交易商户订单号
     * @param transAmt      交易金额,单位为分,撤销金额需等于原订单金额
     * @return
     * @throws Exception
     */
    Message<String> undoOder(String orderNo, long transAmt);

    Message<String> queryBalance();

    /**
     * 民生支付回调通知
     * @param paramMap
     * @return
     */
    String notify(Map paramMap);
}
